#include "SGPCLDenoise.h"
#include <iostream>

namespace sgpcl
{

SGDeNoiseConfig::SGDeNoiseConfig()
  : SGPCLJsonConfig()
  , nNeigbourNum(50)
  , fStddevMulThresh(1)
{
}

void SGDeNoiseConfig::ParseJson(const rapidjson::Value& sJsonRoot)
{
  SGPCLJsonConfig::ParseJson(sJsonRoot, "去噪");

  // 去噪时计算平均距离时使用的临近点数量
  rapidjson::Value::ConstMemberIterator itMember = sJsonRoot.FindMember("NeigbourNum");
  if (itMember != sJsonRoot.MemberEnd())
  {
    nNeigbourNum = itMember->value.GetInt();
  }
  else
  {
    SG_LOG("未指定\"去噪时计算平均距离时使用的临近点数量\"，采用默认值\"" +
      std::to_string(nNeigbourNum) + "\"");
  }

  // 多少个标准差之外的点视为噪点
  itMember = sJsonRoot.FindMember("StddevMulThresh");
  if (itMember != sJsonRoot.MemberEnd())
  {
    fStddevMulThresh = itMember->value.GetFloat();
  }
  else
  {
    SG_LOG("未指定\"多少个标准差之外的点视为噪点\"，采用默认值\"" +
      std::to_string(fStddevMulThresh) + "\"");
  }
}
}
